//package cn.gok.util;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.File;
//import java.lang.reflect.Array;
//import java.lang.reflect.Field;
//import java.lang.reflect.InvocationTargetException;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
//
//public class MapObjectMapper {
//
//    /*
//        将request中的数据取出，转成任意我们需要的对象
//        request   请求对象
//        aclass   要转换对象的类型
//    * */
//    public <T>T getObject(HttpServletRequest request,Class<T> aclass){
//        //1.先获取request中的参数map
//        Map<String, String[]> parameterMap = request.getParameterMap();
//
//
//        T instance=null;
//        try {
//            //2.再根据茶class创建出我们需要的对象
//            instance = aclass.getConstructor().newInstance();
//
//            /*
//                3.将map最后中的数据一一取出存入instance中
//                map中的key就是对象的属性名
//                如果key 在对象中找不到对应的属性，就不管这个属性
//                有哪些key 就对哪些属性赋值
//
//            */
//
//            //判断values是否为数组
//
//            Set<String> keys = parameterMap.keySet();
//            Field[] fields = aclass.getDeclaredFields();
//            for (String key : keys) {
//                //如果key对应的属性存在，我们才对对应的属性进行赋值
//                if (fieldIsExit(fields,key)){
//                    //获取key对应的属性
//                    Field field = aclass.getDeclaredField(key);
//                    //打破属性的私有封装
//                    field.setAccessible(true);
//                    //对属性赋值
//                    //field.set(instance,);
//                    String[] values=parameterMap.get(key);
//                    //长度大于1，说明提交过来的数据有多个，否则是单个数据
//
//                        /*
//                        前端提交的数据都是字符串
//                        我们在做属性封装的时候，实体类中属性的类型一般为String,int,double,date...
//                         */
//                        //获取属性的类型
//                     setFieldValue(instance,field,values);
//                }
//
//            }
//
//
//        } catch (InstantiationException e) {
//            e.printStackTrace();
//        } catch (IllegalAccessException e) {
//            e.printStackTrace();
//        } catch (InvocationTargetException e) {
//            e.printStackTrace();
//        } catch (NoSuchMethodException e) {
//            e.printStackTrace();
//        } catch (NoSuchFieldException e) {
//            e.printStackTrace();
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
//        return instance;
//    }
//
//    //判断在相应的对象 是否有对应的属性存在
//    private boolean fieldIsExit(Field[] fields,String key){
//        for (Field field : fields) {
//            if (field.getName().equals(key)){
//                return true;
//            }
//        }
//        return false;
//    }
//    //判断该属性是哪一种,需要将字符串value转成对应的类型后，赋值
//    private void setFieldValue(Object obj,Field field,String[] values) throws IllegalAccessException, ParseException {
//        Class<?> fieldtype = field.getType();
//        //多个数据时，属性类型要么是数组，要么是集合
//        if (values.length>1){
//            if (fieldtype.isArray()){
//                field.set(obj,values);
//            }
//            else {
//                //将数组转集合
//                List<String> list = Arrays.asList(values);
//            }
//
//        }
//
//        /*
//        如果不大于1，则说明是单个值，单个赋值即可
//         */
//        if (value==null||value==""){
//            field.set(null,value);
//        }
//
//
//        if (fieldtype.equals(String.class)){
//            field.set(obj,value);
//        }
//        else if (fieldtype.equals(Date.class)){
//            Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
//            field.set(obj,date);
//        }
//        else if (fieldtype.equals(Boolean.class)||fieldtype.equals(boolean.class)){
//            Boolean aBoolean = Boolean.valueOf(value);
//            field.set(obj,aBoolean);
//        }
//       else if (fieldtype.equals(Integer.class)||fieldtype.equals(int.class)){
//            int i = Integer.parseInt(value);
//            field.set(obj,i);
//        }
//       else if (fieldtype.equals(Long.class)||fieldtype.equals(long.class)){
//            long l = Long.parseLong(value);
//            field.set(obj,l);
//        }
//        else if (fieldtype.equals(Byte.class)||fieldtype.equals(byte.class)){
//            Byte l = Byte.parseByte(value);
//            field.set(obj,l);
//        }
//        else if (fieldtype.equals(Short.class)||fieldtype.equals(short.class)){
//            Short l = Short.parseShort(value);
//            field.set(obj,l);
//        }
//        else if (fieldtype.equals(Double.class)||fieldtype.equals(double.class)){
//            Double l = Double.parseDouble(value);
//            field.set(obj,l);
//        }
//        else if (fieldtype.equals(Float.class)||fieldtype.equals(float.class)){
//            Float l = Float.parseFloat(value);
//            field.set(obj,l);
//        }
//    }
//
//}
